#define _CRT_SECURE_NO_WARNINGS 2
//
//#include<iostream>
//#include<string>
//using namespace std;
//
//template<class T>
//class A {
//private:
//	int _a;
//	 
//public:
//	A(int a = 1) {
//		_a = a;
//		 
//	}
//	int add(const int& x, const int& y);
//
//};
//
//template<class T>
//int A<T>::add(const int& x, const int& y) {
//	return x + y;
//}
//
//int main() {
//	int a = 1, b = 1;
//	A<int> obj;
//	obj.add(a, b);
//	return 0;
//}
//
//#include<iostream>
//using namespace std;
//
//template<class T>
//int add(const T& x, const T& y) {
//	return 1 ;
//}
//
//int main() {
//	int a = 1,  b = 2;
//	double c = 1.1, d = 2.2;
//	/*add(a, b);
//	add(c, d);*/
//	add(a, (int)d);
//	add((double)a, d);
//	add<int>(a, c);
//	add<double>(b, d);
//	return 0;
//}
//
//#include<iostream>
//#include<string>
//using namespace std;
//
//int main() {
//	string str1;
//	string str2("hello");
//	string str3(str2, 2);
//	//cout << str3 << endl;
//	char s[] = "abc";
//	string str4(s);
//	string str5(4, 'c');
//	str5 = 'c';
//	str5.push_back(4);
//	str5.push_back('c');
//	str5 += 'c';
//	str5 += s;
//	str5 += str5;
//	cout << str5 << endl;
//	//printf("%c", 4);
//	//str1.append(4, 'x');
//	//	cout << str1 << endl;
//	//str1.append(str4);
//	//str1.append(str2, 2);
//	//str1.append(s, 2,-1);
//	//cout << str1 << endl;
//	//cout << str5 << endl;
//	//size_t x = -1;	
//	//cout << x << endl;
//	return 0;
//}

//
//#include<iostream>
//#include<string>
//#include<cmath>
//using namespace std;
//
//int NumInt(int a) {
//	if (a < 10)
//		return 1;
//	else
//		return 1 + NumInt(a / 10);
//}
//
//int main() {
//	string str = "https://legacy.cplusplus.com/reference/string/string/string/";
//	string sub1(str, 0, 5);
//	string sub2(str, 8, 20);
//	string sub3(str, 29, 9);
//	cout << sub1 << endl << sub2 << endl << sub3 << endl;
//	int a = 12003004;
//	char s[] = "  1111  4";
//	int b = atoi(s);
//	string str1 = "hello";
//	int i = 1;
//	int len = NumInt(a);
//	while (i <= len) {
//		char c = '0' + a / ((int)pow(10, len - i));
//		str1.push_back(c);
//		a= a % ((int)pow(10, len - i));
//		i++;
//	}
//	cout << b << endl;
//	cout << str1 << endl;
//	return 0;
//}

#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<algorithm>
using namespace std;

void Fun1(const string& s) {
	string::const_iterator it = s.begin();
	while (it != s.end()) {
		//*(it)++;error
		it++;
	}
	cout << s << endl;
	/*for (auto i : s) {
		cout << i << " ";
	}*/
}

void Fun2(string& s) {
	string::reverse_iterator it = s.rbegin();
	cout << *it << endl;
	//cout << *(s.rend()) << endl;error
	while (it != s.rend()) {
		(*it)++;
		cout << *it << " ";
		++it;
	}
}

void Fun3(const string& s) {
	string::const_reverse_iterator it = s.rbegin();
	while (it != s.rend()) {
		//(*it)++;error
		cout << *it << " ";
		it++;
	}
}

void Fun4(const string& s) {
	string::const_iterator it = s.begin();
	while (it != s.end()) {
		//(*it)++;error
		cout << *it << " ";
		it++;
	}
}

int main() {
	string s1("hello world");
	char s2[] = "hello world";
	//Fun1(s1);
	Fun2(s1);
	cout << s1.max_size() << endl;
	vector<int> lt;
	lt.push_back(1);
	lt.push_back(2);
	lt.push_back(3);
	size_t sz1 = lt.size();
	for (int j = 0; j < 200; j++) {
		lt.push_back(j);
		if (sz1 != lt.size()) {
			cout << lt.size() << " ";
			sz1 = lt.size();
		}
	}
	cout << s1.capacity() << endl;
	size_t sz = s1.capacity();
	for (int i = 0; i < 150; i++) {
		s1.push_back('c');
		if (sz != s1.capacity()) {
			cout << s1.capacity() << endl;
			sz = s1.capacity();
		}
	 }
	//sort(s1.begin(), s1.end());
	//reverse(s1.begin(), s1.end());
	//cout << *(s1.end()) << endl;
	//cout << s1 << endl;
	/*vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	vector<int>::iterator it = v.begin();
	while (it != v.end()) {
		cout << *it << " ";
		it++;
	}
	cout << endl;
	list<char> lt;
	lt.push_back('c');
	lt.push_back('d');
	lt.push_back('e');
	list<char>::iterator it1 = lt.begin();
	while (it1 != lt.end()) {
		cout << *it1 << " ";
		it1++;
	}
	for (auto i : lt) {
		cout << i << " ";
	}
	for (int i : v) {
		cout<<i<<" ";
	}*/
	/*for (char& ch : s1) {
		ch++;
	}
	cout << s1 << endl;*/
	/*s1[1];
	s2[1];*/
	/*string::iterator it = s1.begin();
	while (it != s1.end()) {
		(*it)++;
		it++;
	}
	cout << s1 << endl;*/
	/*cout << s1.size() << endl;
	cout << s1.length() << endl;
	for (int i = 0; i < s1.size(); i++) {
		cout << s1[i]++ << " ";
	}
	cout << endl;
	for (int i = 0; i < s1.size(); i++) {
		cout << s1[i] << " ";
	}*/
	return 0;
}